package leetcode;

import java.util.Arrays;

/*
给定一个整型数组，在数组中找出由三个数组成的最大乘积，并输出这个乘积。

示例 1:

输入: [1,2,3]
输出: 6

思路：
构造两个字数组
找出最小的两个负数
找出最大的三个正数
最后比较两个负数乘积是否大于
 */
public class Test0628 {
    public int maximumProduct(int[] nums) {
        int[] posNums=new int[3];
        int[] negNums=new int[3];
        int[] negNums2=new int[3];

        int max=-1001;

        for(int i=0;i<nums.length;i++){
            if(max<nums[i])
                max=nums[i];
            if(nums[i]>0){
                insertPos(posNums,nums[i]);
            }
            else if(nums[i]<0){
                insertNeg(negNums,nums[i]);
                insertNeg2(negNums2,nums[i]);
            }
        }

        for(int i=0;i<negNums2.length;i++){
            System.out.println(negNums2[i]);
        }
        System.out.println(max);
        Arrays.sort(negNums);
        Arrays.sort(negNums2);
        int result1=posNums[0]*posNums[1]*posNums[2];
        int result2=0;
        if(nums.length==3){
            return nums[0]*nums[1]*nums[2];
        }
        else{
            if(max<0){
                result1=negNums2[0]*negNums2[1]*negNums2[2];
                return result1;
            }
            else if(max==0){
                return max;
            }
            else{
                result2=negNums[0]*negNums[1]*posNums[2];
                return  result1>result2?result1:result2;
            }
        }
    }

    public void insertPos(int[] posNumbs,int target){
        for(int i=posNumbs.length-1;i>=0;i--){
            if(posNumbs[i]==0){
                posNumbs[i]=target;
                return;
            }
        }
        Arrays.sort(posNumbs);
        for(int i=0;i<posNumbs.length;i++){
            if(posNumbs[i]<target){
                posNumbs[i]=target;
                return;
            }
        }
    }

    public void insertNeg(int[] negNums,int target){
        for(int i=negNums.length-1;i>=0;i--){
            if(negNums[i]==0){
                negNums[i]=target;
                return;
            }
        }
        Arrays.sort(negNums);
        for(int i=0;i<negNums.length;i++){
            if(negNums[i]>target){
                negNums[i]=target;
                return;
            }
        }
    }

    public void insertNeg2(int[] negNums,int target){
        for(int i=negNums.length-1;i>=0;i--){
            if(negNums[i]==0){
                //System.out.println(target);
                negNums[i]=target;
                return;
            }
        }
        Arrays.sort(negNums);
        for(int i=0;i<negNums.length;i++){
            if(negNums[i]<target){
                negNums[i]=target;
                System.out.println(target);
                return;
            }
        }
    }
}
